home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
PCSSP.LZH
/
PC-SSP.ZIP
/
MATINSL.ZIP
/
DMTDS.FOR
< prev
next >
Wrap
Text File
|
1985-11-29
|
5KB
|
157 lines
C
C ..................................................................
C
C SUBROUTINE DMTDS
C
C PURPOSE
C MULTIPLY A GENERAL MATRIX A ON THE LEFT OR RIGHT BY
C INVERSE(T),INVERSE(TRANSPOSE(T)) OR INVERSE(TRANSPOSE(T*T))
C THE TRIANGULAR MATRIX T IS STORED COLUMNWISE IN COMPRESSED
C FORM, I.E. UPPER TRIANGULAR PART ONLY.
C
C USAGE
C CALL DMTDS(A,M,N,T,IOP,IER)
C
C DESCRIPTION OF PARAMETERS
C A - GIVEN GENERAL MATRIX WITH M ROWS AND N COLUMNS.
C A MUST BE OF DOUBLE PRECISION
C M - NUMBER OF ROWS OF MATRIX A
C N - NUMBER OF COLUMNS OF MATRIX A
C T - GIVEN TRIANGULAR MATRIX STORED COLUMNWISE UPPER
C TRIANGULAR PART ONLY. ITS NUMBER OF ROWS AND
C COLUMNS K IS IMPLIED BY COMPATIBILITY.
C K = M IF IOP IS POSITIVE,
C K = N IF IOP IS NEGATIVE.
C T OCCUPIES K*(K+1)/2 STORAGE POSITIONS.
C T MUST BE OF DOUBLE PRECISION
C IOP - INPUT VARIABLE FOR SELECTION OF OPERATION
C IOP = 1 - A IS REPLACED BY INVERSE(T)*A
C IOP =-1 - A IS REPLACED BY A*INVERSE(T)
C IOP = 2 - A IS REPLACED BY INVERSE(TRANSPOSE(T))*A
C IOP =-2 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T))
C IOP = 3 - A IS REPLACED BY INVERSE(TRANSPOSE(T)*T)*A
C IOP =-3 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T)*T)
C IER - RESULTING ERROR PARAMETER
C IER =-1 MEANS M AND N ARE NOT BOTH POSITIVE
C AND/OR IOP IS ILLEGAL
C IER = 0 MEANS OPERATION WAS SUCCESSFUL
C IER = 1 MEANS TRIANGULAR MATRIX T IS SINGULAR
C
C REMARKS
C SUBROUTINE DMTDS MAY BE USED TO CALCULATE THE SOLUTION OF
C A SYSTEM OF EQUATIONS WITH SYMMETRIC POSITIVE DEFINITE
C COEFFICIENT MATRIX. THE FIRST STEP TOWARDS THE SOLUTION
C IS TRIANGULAR FACTORIZATION BY MEANS OF DMFSD, THE SECOND
C STEP IS APPLICATION OF DMTDS.
C SUBROUTINES DMFSD AND DMTDS MAY BE USED IN ORDER TO
C CACULATE THE PRODUCT TRANSPOSE(A)*INVERSE(B)*A WITH GIVEN
C SYMMETRIC POSITIVE DEFINITE B AND GIVEN A IN THREE STEPS
C 1) TRIANGULAR FACTORIZATION OF B (B=TRANSPOSE(T)*T)
C 2) MULTIPLICATION OF A ON THE LEFT BY INVERSE(TRANSPOSE(T))
C A IS REPLACED BY C=INVERSE(TRANSPOSE(T))*A
C 3) CALCULATION OF THE RESULT FORMING TRANSPOSE(C)*C
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C NONE
C
C METHOD
C CALCULATION OF X = INVERSE(T)*A IS DONE USING BACKWARD
C SUBSTITUTION TO OBTAIN X FROM T*X = A.
C CALCULATION OF Y = INVERSE(TRANSPOSE(T))*A IS DONE USING
C FORWARD SUBSTITUTION TO OBTAIN Y FROM TRANSPOSE(T)*Y = A.
C CALCULATION OF Z = INVERSE(TRANSPOSE(T)*T)*A IS DONE
C SOLVING FIRST TRANSPOSE(T)*Y = A AND THEN T*Z = Y, IE.
C USING THE ABOVE TWO STEPS IN REVERSE ORDER
C
C ..................................................................
C
SUBROUTINE DMTDS(A,M,N,T,IOP,IER)
C
C
DIMENSION A(1),T(1)
DOUBLE PRECISION DSUM,A,T
C
C TEST OF DIMENSION
IF(M)2,2,1
1 IF(N)2,2,4
C
C ERROR RETURN IN CASE OF ILLEGAL DIMENSIONS
2 IER=-1
RETURN
C
C ERROR RETURN IN CASE OF SINGULAR MATRIX T
3 IER=1
RETURN
C
C INITIALIZE DIVISION PROCESS
4 MN=M*N
MM=M*(M+1)/2
MM1=M-1
IER=0
ICS=M
IRS=1
IMEND=M
C
C TEST SPECIFIED OPERATION
IF(IOP)5,2,6
5 MM=N*(N+1)/2
MM1=N-1
IRS=M
ICS=1
IMEND=MN-M+1
MN=M
6 IOPE=MOD(IOP+3,3)
IF(IABS(IOP)-3)7,7,2
7 IF(IOPE-1)8,18,8
C
C INITIALIZE SOLUTION OF TRANSPOSE(T)*X = A
8 MEND=1
LLD=IRS
MSTA=1
MDEL=1
MX=1
LD=1
LX=0
C
C TEST FOR NONZERO DIAGONAL TERM IN T
9 IF(T(MSTA))10,3,10
10 DO 11 I=MEND,MN,ICS
11 A(I)=A(I)/T(MSTA)
C
C IS M EQUAL 1
IF(MM1)2,15,12
12 DO 14 J=1,MM1
MSTA=MSTA+MDEL
MDEL=MDEL+MX
DO 14 I=MEND,MN,ICS
DSUM=0.D0
L=MSTA
LDX=LD
LL=I
DO 13 K=1,J
DSUM=DSUM-T(L)*A(LL)
LL=LL+LLD
L=L+LDX
13 LDX=LDX+LX
IF(T(L))14,3,14
14 A(LL)=(DSUM+A(LL))/T(L)
C
C TEST END OF OPERATION
15 IF(IER)16,17,16
16 IER=0
RETURN
17 IF(IOPE)18,18,16
C
C INITIALIZE SOLUTION OF T*X = A
18 IER=1
MEND=IMEND
MN=M*N
LLD=-IRS
MSTA=MM
MDEL=-1
MX=0
LD=-MM1
LX=1
GOTO 9
END